###Function###
RunAs

###Description###
Startet ein externes Programm im Kontext eines anderen Benutzers.

###Syntax###
RunAs ( "username", "domain", "password", logon_flag, "program" [, "workingdir" [, show_flag [, opt_flag]]] )


###Parameters###
@@ParamTable@@
username
	Benutzername, mit dem eingeloggt wird.
domain
	Domne, gegenber der man sich authentifiziert.
password
	Passwort des Benutzers.
logon_flag
	0 - Interaktives Logon ohne Profil.
	1 - Interaktives Logon mit Profil.
	2 - Nur Netzwerk-Authentifizierung.
	4 - bernehme die Umgebung des aufrufenden Prozesses statt der Umgebung des Benutzers.
program
	Der komplette Pfad des Programms (.EXE, .BAT, .COM oder .PIF), die ausgefhrt werden soll. (siehe Bemerkungen)
workingdir
	[optional] Arbeitsverzeichnis.  Wenn nicht angegeben, wird @SystemDir verwendet. Dies ist nicht der Pfad des Programms.
show_flag
	[optional] Legt die Sichtbarkeit des ausgefhrten Programms fest:
		@SW_HIDE = Verstecktes Fenster (benutzt alternativ das Schlsselwort Default).
		@SW_MINIMIZE = Minimiertes Fenster.
		@SW_MAXIMIZE = Maximiertes Fenster.
opt_flag
	[optional] Steuert verschiedene Optionen, die die Interaktion zwischen Parent- und Child-Prozess betreffen (STDIO).
		0x1 ($STDIN_CHILD)  = Stellt ein Handle zum STDIN-Stream des Child-Fensters bereit.
		0x2 ($STDOUT_CHILD) = Stellt ein Handle zum STDOUT-Stream des Child-Fensters bereit.
		0x4 ($STDERR_CHILD) = Stellt ein Handle zum STDERR-Stream des Child-Fensters bereit.
		0x8 ($STDERR_MERGED) = Stellt das selbe Handle fr den STDOUT- und STDERR-Stream bereit (Setzt $STDOUT_CHILD und $STDERR_CHILD).
		0x10 ($STDIO_INHERIT_PARENT) = Stellt dem Child-Fenster das Handle zum STDIO-Stream des Parent-Fensters bereit. Kann nicht mit einem anderen STDIO-Flag kombiniert werden. Dieses Flag ist nur dann sinnvoll, wenn die Parent-Anwendung als Kommandozeilenapplikation kompiliert wurde.
		0x10000 ($RUN_CREATE_NEW_CONSOLE) = Der Child-Kommandozeilenprozess wird in einem eigenen Kommandozeilenfenster ausgefhrt. Dieses Flag ist nur dann sinnvoll, wenn die Parent-Anwendung als Kommandozeilenapplikation kompiliert wurde.
@@End@@

###ReturnValue###
@@ReturnTable@@
Erfolg:	Die PID des Prozesses, der gestartet wurde.
Fehler:	0 und setzt @error ungleich Null.
@@End@@


###Remarks###
Pfade mit Leerzeichen mssen in Anfhrungszeichen gesetzt werden.

Es ist wichtig, ein Arbeitsverzeichnis anzugeben, fr den der Benutzer Zugriffsrechte hat, in dessen Kontext der Prozess ausgefhrt wird, anderenfalls schlgt der Aufruf der Funktion <a href="RunAs.htm">RunAs()</a> fehl.

Es ist empfehlenswert, nur dann das "fremde" Benutzerprofil zu verwenden, wenn es auch wirklich bentigt wird. Es besteht eine geringe Wahrscheinlichkeit, dass das Profil unter bestimmten Bedingungen im Speicher hngen bleibt. Wenn ein Skript <a href="RunAs.htm">RunAs()</a> benutzt, um einen Prozess unter dem SYSTEM-Account zu starten (z.B. um als Dienst zu fungieren), und ein Benutzerprofil ist aktiv, muss dafr gesorgt werden, dass das Skript nicht beendet wird, bevor der Child-Prozess geschlossen wurde.

Wenn man als Administrator angemeldet ist, muss der Service 'Sekundre Anmeldung' (<a href="RunAs.htm">RunAs()</a>) aktiv sein, sonst schlgt die Funktion fehl. Dies gilt nicht, wenn das SYSTEM-Konto aktiv ist.

Nach dem Start des angeforderten Programms wird das Skript weiter ausgefhrt. Soll die Ausfhrung des Skripts angehalten werden, bis das gestartete Programm beendet ist, so ist statt der <a href="RunAs.htm">RunAs()</a> Funktion die <a href="RunAsWait.htm">RunAsWait()</a> Funktion zu verwenden.

Das Bereitstellen der Standard-I/O-Parameter mit den geeigneten Werten ist Voraussetzung fr die Interaktion des Child-Prozesses mit den Funktionen <a href="StderrRead.htm">StderrRead()</a>, <a href="StdinWrite.htm">StdinWrite()</a> und <a href="StdoutRead.htm">StdoutRead()</a>.
Um mehrere I/O-Streams zu verwalten, kombiniert man die Flag-Werte (oder man benutzt $STDERR_CHILD, $STDIN_CHILD & $STDOUT_CHILD, die in Constants.au3 definiert sind).

Um die I/O-Streams zu schlieen, mssen folgende Bedingungen erfllt sein: 
1) Der Child-Prozess hat seine Seite des Streams geschlossen (das ist der Fall, wenn der Child-Prozess geschlossen wird). 
2) AutoIt muss gekaperte Streams auslesen, bis keine Daten mehr enthalten sind.  
3) Wenn STDIN dem Child-Prozess zugewiesen ist, muss <a href="StdinWrite.htm">StdinWrite()</a> aufgerufen werden, um den Stream zu schlieen. Sobald alle Streams als nicht mehr bentigt erkannt werden, werden alle intern verwendeten Ressourcen automatisch freigegeben.
<a href="StdioClose.htm">StdioClose()</a> kann verwendet werden, um das Schlieen der STDIO-Streams zu erzwingen.

Die 'logon_flags' mit Profil (0 oder 1) und Netzwerk-Authentifizierung (2) sind inkompatibel. Wenn beide in Kombination benutzt werden, kann das zu unvorhersehbaren Ergebnissen fhren!

Aufgrund eines Problems, das Windows XP mit der Fenstererzeugung hat, kann die STDIO-Umleitung und Steuerung der Sichtbarkeit blockiert werden (siehe den Microsoft Knowledge Base Artikel KB818858 fr weitere Informationen darber, welche Versionen betroffen sind und wie das Problem umgangen werden kann).  Benutzer von Windows XP SP2 (oder spter) oder Windows Vista (oder spter) sind nicht betroffen.


###Related###
Run, RunWait, RunAsWait, ShellExecute, ShellExecuteWait, StderrRead, StdinWrite, StdoutRead, StdioClose, ProcessClose


###Example###
@@IncludeExample@@
